export default function unmountNode(node) {
  const vDom = node._vDom; // 获取要删除节点的 vDom 对象

  // 1、文本节点可以直接删除
  if (vDom.type === 'text') {
    node.remove();
    return;
  }

  // 2、判断节点是否由组件生成
  const component = vDom.component;
  // 如果 component 存在 说明是由组件生成的
  if (component) {
    component.componentWillUnmount();
  }

  // 3、看看节点身上是否有 ref 属性
  if (vDom.props && vDom.props.ref) {
    vDom.props.ref(null);
  }

  // 4、节点的属性中是否有时间属性 如果有 删除事件处理函数
  Object.keys(vDom.props).forEach(attr => {
    if (attr.startsWith('on')) {
      const eventName = attr.toLocaleLowerCase().slice(0, 2);
      const eventHander = vDom.props[attr];
      node.removeEventListener(eventName, eventHander);
    }
  });

  // 5、节点中是否有子节点 如果有 需要递归删除
  if (node.childNodes.length) {
    for (let i = 0; i < node.childNodes.length; i++) {
      unmountNode(node.childNodes[i]);
      i--;
    }
  }

  // 6、最后删除节点
  node.remove();
}